package rtda

import "jvm/rtda/heap"

type JThread struct {
	pc     int
	jStack *JStack
}

func NewJThread() *JThread {
	return &JThread{
		jStack: newJStack(1024),
	}
}

func (jt *JThread) PushJFrame(jFrame *JFrame) {
	jt.jStack.push(jFrame)
}

func (jt *JThread) PopJFrame() *JFrame {
	return jt.jStack.pop()
}

func (jt *JThread) TopJFrame() *JFrame {
	return jt.jStack.top()
}

func (jt *JThread) CurrentJFrame() *JFrame {
	return jt.jStack.top()
}

func (jt *JThread) PC() int {
	return jt.pc
}

func (jt *JThread) SetPC(pc int) {
	jt.pc = pc
}
func (jt *JThread) NewJFrame(method *heap.Method) *JFrame {
	return newJFrame(jt, method)
}

func (jt *JThread) IsStackEmpty() bool {
	return jt.jStack.isEmpty()
}

func (jt *JThread) ClearStack() {
	jt.jStack.clear()
}

func (jt *JThread) GetJFrames() []*JFrame {
	return jt.jStack.getFrames()
}
